package com.huxiaoshou.exam.controller;

import com.huxiaoshou.exam.common.Result;
import com.huxiaoshou.exam.entity.Category;
import com.huxiaoshou.exam.service.CategoryService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 分类控制器 - 处理题目分类管理相关的HTTP请求
 * 包括分类的增删改查、树形结构展示等功能
 */
@Slf4j
@CrossOrigin("*")
@RestController
@RequestMapping("/api/categories")
@Tag(name = "分类管理", description = "题目分类相关操作，包括分类的增删改查、树形结构管理等功能")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    /**
     * 获取分类列表（包含题目数量）
     *
     * @return 分类列表数据
     */
    @GetMapping
    @Operation(summary = "获取分类列表", description = "获取所有题目分类列表，包含每个分类下的题目数量统计")
    public Result<List<Category>> getCategories() {
        List<Category> categoryList = categoryService.getAllCategories();
        return Result.success(categoryList);
    }

    /**
     * 获取分类树形结构
     *
     * @return 分类树数据
     */
    @GetMapping("/tree")
    @Operation(summary = "获取分类树形结构", description = "获取题目分类的树形层级结构，用于前端树形组件展示")
    public Result<List<Category>> getCategoryTree() {
        List<Category> categoryTreeList = categoryService.getCategoryTree();
        return Result.success(categoryTreeList);
    }

    /**
     * 添加分类
     *
     * @param category 分类对象
     * @return 操作结果
     */
    @PostMapping
    @Operation(summary = "添加新分类", description = "创建新的题目分类，支持设置父分类实现层级结构")
    public Result<Void> addCategory(@RequestBody Category category) {
        categoryService.addCategory(category);
        return Result.success("分类添加成功！");
    }

    /**
     * 更新分类
     *
     * @param category 分类对象
     * @return 操作结果
     */
    @PutMapping
    @Operation(summary = "更新分类信息", description = "修改分类的名称、描述、排序等信息")
    public Result<Void> updateCategory(@RequestBody Category category) {
        categoryService.updateCategory(category);
        log.info("在{}父分类下，更新{}子分类成功！", category.getParentId(), category.getName());
        return Result.success("更新分类接口调用成功！");
    }

    /**
     * 删除分类
     *
     * @param id 分类ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除分类", description = "删除指定的题目分类，注意：删除前需确保分类下没有题目")
    public Result<Void> deleteCategory(@Parameter(description = "分类ID") @PathVariable Long id) {
        categoryService.deleteCategory(id);
        return Result.success("分类删除成功！");
    }

} 